# encoding: utf-8

from widget.info_box import *
from widget.daoru_page.import_init_page.import_func.sqlserver_to_es_func import Sqlserver2Es
from widget.daoru_page.import_init_page.import_func.excl_to_es_func import Excl2Es
from widget.daoru_page.import_init_page.import_func.marc_to_es_func import Marc2Es
from widget.daoru_page.import_init_page.import_func.noteexpress_to_es_func import NoteExpress2Es
from urllib.parse import quote


class Sqlserver2EsTable(object):
    '''
    sqlserver导入es的表格
    '''
    def __init__(self, cur_table):
        self.table1 = cur_table
        # 初始化 当前条、总条数 和 字段个数
        # 当前条current_one 和 总条数sum_one 用于显示页面label，
        # sum_field用于判断是否可以进行导入操作【如果sum_field不为None说明成功加载到了数据，那么可以执行导入操作】
        self.current_one = None
        self.sum_one = None
        self.sum_field = None
        # 已选中的字段(导入时进行判断，如果该队列为空，那么不允许导入)
        self.checked_target_list = []
        # 未选中的字段(导入时进行判断，如果该队列中包含必填的字段，那么不允许导入)
        self.not_checked_target_list = []

        # 初始化table
        self.init_table()

        # 初始化底部按钮
        self.init_bottom_btns_func()

    def init_table(self):
        '''
        初始化空表格
        :return:
        '''
        # self.table1 = QTableWidget(self)
        # self.table1.resize(850, 500)
        # self.table1.move(50, 150)

        # 设置行数、列数
        self.table1.setColumnCount(5)
        # self.table1.setRowCount(20)
        # 设置表格每列的宽度
        self.table1.setColumnWidth(0, 175)
        self.table1.setColumnWidth(1, 175)
        self.table1.setColumnWidth(2, 175)
        self.table1.setColumnWidth(3, 70)
        self.table1.setColumnWidth(4, 80)
        self.table1.setColumnWidth(5, 175)
        # self.table1.setColumnWidth(5, 170)
        # self.table1.setColumnWidth(6, 80)
        # self.table1.clear()
        self.table1.setHorizontalHeaderLabels(["数据源字段", "目标字段", "数据源内容", "查重字段", "处理方式"])

        # 数据预览按钮绑定事件
        # self.table1.parent().daoru_btn3.clicked.connect(lambda: self.show_source_data(self.table1.parent().daoru_combo1.currentText(), self.table1.parent().daoru_combo2.currentText()))

    def show_source_data(self):
        '''
        刷新表格，初始化 当前页 和 总页数，更新页码label
        :return:
        '''
        if not hasattr(qApp, 'cx_src') or not hasattr(qApp, 'cx_tgt'):
            self.info_lyhzb = InfoBox('请配置 来源 和 目标')
            self.info_lyhzb.show()
            return

        if not 'com' in qApp.cx_src or not qApp.cx_src['com']['field_content_list']:
            self.ly_empty_box = InfoBox('来源表为空 或 格式有误')
            self.ly_empty_box.show()
            self.table1.clear()
            return
        # source_name_list = self.table1.parent().daoru_input1.text().split(',')
        # self.table1.setRowCount(len(source_name_list))
        # target_name_list = ('不导入,' + self.table1.parent().daoru_input2.text()).split(',')
        # print(target_name_list)
        source_name_list = qApp.cx_src['com']['field_name_list']
        # source_name_list = source_name_list.remove(self.table1.parent().source_dict['primary_key'])
        # source_name_list = ('不导入,关联其他表,' + self.table1.parent().daoru_input1.text()).split(',')
        # print('source_name_list: {0}'.format(source_name_list))
        # print(self.table1.parent().source_dict['primary_key'])
        target_name_list = ('不导入,' + ','.join(qApp.cx_tgt['target_name_list'])).split(',')
        # print(target_name_list)
        # print(1/0)
        self.table1.setRowCount(len(source_name_list))
        for i in range(len(source_name_list)):
            # print(source_name_list[i])
            # 源数据字段
            self.table1.setItem(i, 0, QTableWidgetItem(str(source_name_list[i])))
            # self.table1.setItem(i, 1, QTableWidgetItem(str(self.table1.parent().source_dict['field_content_list'][0][i])))
            # 目标字段 对应的数据库字段下拉选择
            tb_combo1 = QComboBox()
            tb_combo1.setView(QListView())  # 通过setView和全局qss设置行高
            tb_combo1.addItems(target_name_list)

            tb_combo1.currentTextChanged.connect(self.change_target_field_list)
            self.table1.setCellWidget(i, 1, tb_combo1)
            # 源数据内容
            source_text = self.table1.item(i, 0).text()
            # print(qApp.cx_source_sqlserver_dict)

            source_content = str(qApp.cx_src['com']['field_content_list'][0][qApp.cx_src['com']['field_name_list'].index(source_text)])
            # print('source_content: {0}'.format(source_content))

            self.table1.setItem(i, 2, QTableWidgetItem(source_content))

            # 如果目标选择的是 附件 就按 附件 处理
            if qApp.cx_tgt['target_type'] == 3:
                self.table1.setColumnCount(6)
                self.table1.setColumnWidth(0, 175)
                self.table1.setColumnWidth(1, 175)
                self.table1.setColumnWidth(2, 175)
                self.table1.setColumnWidth(3, 0)
                self.table1.setColumnWidth(4, 0)
                self.table1.setColumnWidth(5, 175)
                self.table1.setHorizontalHeaderLabels(["数据源字段", "目标字段", "数据源内容","","", "与资料的关联字段"])

                # 与资料的关联字段
                tb_fjrel_combox = QComboBox()
                tb_fjrel_combox.setView(QListView())  # 通过setView和全局qss设置行高
                tb_fjrel_combox.addItems(qApp.cx_tgt['relate_data_list'])
                tb_fjrel_combox.currentTextChanged.connect(self.change_relate_box_list)
                self.table1.setCellWidget(i, 5, tb_fjrel_combox)

            # 如果目标选择的是 资料 就按 资料 处理
            elif qApp.cx_tgt['target_type'] == 1:
                self.table1.setColumnWidth(0, 175)
                self.table1.setColumnWidth(1, 175)
                self.table1.setColumnWidth(2, 175)
                self.table1.setColumnWidth(3, 70)
                self.table1.setColumnWidth(4, 80)
                # self.table1.setColumnWidth(5, 175)
                self.table1.setColumnCount(5)
                self.table1.setHorizontalHeaderLabels(["数据源字段", "目标字段", "数据源内容", "查重字段", "处理方式"])
                # 查重字段
                is_ck_checkbox = QCheckBox()
                is_ck_checkbox.stateChanged.connect(self.chenge_repaet_check_box_list)
                self.table1.setCellWidget(i, 3, is_ck_checkbox)
                self.table1.cellWidget(i, 3).setStyleSheet("margin-left: 25px;")
                self.table1.cellWidget(i, 3).setEnabled(False)

                # 查重方式
                tb_combo2 = QComboBox()
                tb_combo2.setView(QListView())  # 通过setView和全局qss设置行高
                tb_combo2_list = ['跳过', '覆盖', '追加']
                tb_combo2.addItems(tb_combo2_list)
                tb_combo2.setEnabled(False)
                self.table1.setCellWidget(i, 4, tb_combo2)

                # # 与附件的关联字段
                # tb_fjrel_combox = QComboBox()
                # tb_fjrel_combox.setView(QListView())  # 通过setView和全局qss设置行高
                # tb_fjrel_combox.addItems(target_name_list)
                # self.table1.setCellWidget(i, 5, tb_fjrel_combox)

            # 如果目标选择的是 基础表 就按 基础表 处理
            elif qApp.cx_tgt['target_type'] == 2:
                self.table1.setColumnWidth(0, 175)
                self.table1.setColumnWidth(1, 175)
                self.table1.setColumnWidth(2, 175)
                self.table1.setColumnWidth(3, 70)
                self.table1.setColumnWidth(4, 80)
                self.table1.setColumnCount(5)
                self.table1.setHorizontalHeaderLabels(["数据源字段", "目标字段", "数据源内容", "查重字段", "处理方式"])
                # 查重字段
                is_ck_checkbox = QCheckBox()
                is_ck_checkbox.stateChanged.connect(self.chenge_repaet_check_box_list)
                self.table1.setCellWidget(i, 3, is_ck_checkbox)
                self.table1.cellWidget(i, 3).setStyleSheet("margin-left: 25px;")
                self.table1.cellWidget(i, 3).setEnabled(False)

                # 查重方式
                tb_combo2 = QComboBox()
                tb_combo2.setView(QListView())  # 通过setView和全局qss设置行高
                tb_combo2_list = ['跳过', '覆盖', '追加']
                tb_combo2.addItems(tb_combo2_list)
                tb_combo2.setEnabled(False)
                self.table1.setCellWidget(i, 4, tb_combo2)

        # 初始化 当前条、总条数 和 字段个数
        self.table1.parent().current_one = 1
        self.sum_num = len(qApp.cx_src['com']['field_content_list'])
        self.table1.parent().sum_one = self.sum_num if self.sum_num < 10 else 10
        # self.table1.parent().sum_one = self.sum_num

        # self.sum_field = len(row0)

        # 更新 当前页/总页数 面板
        self.table1.parent().num_show_label.setText("第{0}条 / 共{1}条".format(self.table1.parent().current_one, self.table1.parent().sum_one))

        # 表格加载出来了，那么就让 下一页、上一页、转跳 和 开始导入按钮 显示
        for btn in self.table1.parent().findChildren(QWidget, "daoru_bottom_btn"):
            print(btn)
            btn.setEnabled(True)

        # 表格初始化完成后先对字段内容做一下处理
        self.change_target_field_list()
        self.chenge_repaet_check_box_list()

        # 展示表格附加功能按钮
        self.table1.table_func_btn.show()
        self.table1.table_func_btn.disconnect()
        self.table1.table_func_btn.clicked.connect(self.show_table_func_page)

    def show_table_func_page(self):
        '''
        表格附加功能页
        :return:
        '''
        self.custom_box = CustomBox('表格附加功能', width=400, height=200)
        self.custom_box.show_table_func_widget = QWidget(self.custom_box)
        self.custom_box.show_table_func_widget.setGeometry(50, 50, self.custom_box.width() - 100,
                                                       self.custom_box.height() - 100)

        self.plxgclff_label = QLabel('批量修改处理方法：')
        self.plxgclff_combox = QComboBox()
        self.plxgclff_combox.setView(QListView())  # 通过setView和全局qss设置行高
        tb_combo2_list = ['跳过', '覆盖', '追加']
        self.plxgclff_combox.addItems(tb_combo2_list)

        row0 = QHBoxLayout()
        row0.addWidget(self.plxgclff_label)
        row0.addWidget(self.plxgclff_combox)

        vbox = QVBoxLayout()
        vbox.addLayout(row0)

        self.custom_box.show_table_func_widget.setLayout(vbox)

        # 点击确定创建新 系统信息
        self.custom_box.enter_btn.close()
        self.custom_box.cancel_btn.setText('确定')
        self.custom_box.cancel_btn.clicked.connect(lambda: self.plxgclff(self.plxgclff_combox.currentText()))

        self.custom_box.show()

    def plxgclff(self, currentText):
        '''
        批量修改处理方法
        :return:
        '''
        for i in range(self.table1.rowCount()):
            if self.table1.cellWidget(i, 4):
                self.table1.cellWidget(i, 4).setCurrentText(currentText)
        # print('批量修改撒')
        # for i in range(self.table1.rowCount):
        #     cczd_checkbox = self.table1.cellWidget(i, 3)
        #     if cczd_checkbox and cczd_checkbox.isEnabled():
        #         # 如果查重字段存在且任意一个查重字段可以被选择，那么允许批量修改操作
        #         for i in range(self.table1.rowCount):
        #             if self.table1.cellWidget(i, 4):
        #                 self.table1.cellWidget.setCurrentText(currentText)
        #         break

    def add_task_name_box(self):
        '''
        创建任务名称
        点击确定后调用 create_task 方法生成任务
        :return:
        '''
        # 未选择导入目标字段时 给出提示 start -------------------------------
        target_checked_flag = False
        for i in range(self.table1.rowCount()):
            target_combox = self.table1.cellWidget(i, 1).currentText()
            if target_combox != '不导入':
                target_checked_flag = True
                break
        if not target_checked_flag:
            self.wxzdrzd_box = InfoBox('未选择导入目标字段')
            self.wxzdrzd_box.show()
            return
        # 未选择导入目标字段时 给出提示 end -------------------------------

        # 让用户输入任务名称 start --------------------------------------
        self.custom_box = CustomBox('请输入任务名称', width=500, height=200)

        self.custom_box.add_sys_msg_widget = QWidget(self.custom_box)
        self.custom_box.add_sys_msg_widget.setGeometry(50, 50, self.custom_box.width() - 100,
                                                       self.custom_box.height() - 100)

        self.add_sys_msg_input1 = QLineEdit()
        # self.add_sys_msg_label2 = QLabel('PS:新的系统ID标识通常使用客户简称+系统名缩写')

        row0 = QHBoxLayout()
        row0.addWidget(self.add_sys_msg_input1)

        vbox = QVBoxLayout()
        vbox.addStretch(1)  # 站位分割
        vbox.addLayout(row0)
        vbox.addStretch(1)  # 站位分割

        self.custom_box.add_sys_msg_widget.setLayout(vbox)

        self.custom_box.enter_btn.clicked.connect(lambda: self.create_task(self.add_sys_msg_input1.text()))

        self.custom_box.show()

        # 让用户输入任务名称 end ----------------------------------------

    def create_task(self, taskname):
        taskname = quote(taskname)
        if not taskname:
            self.info_box = InfoBox('请输入任务名')
            self.info_box.show()
            return

        self.custom_box.close()

        # target = self.table1.parent().daoru_combo2.currentText()

        # 来源配置
        source_dict = qApp.cx_src
        source_dict['com']['field_content_list'] = []   # 没用的字段清除
        # 目标配置
        target_dict = qApp.cx_tgt

        self.create_unify_task(taskname, source_dict, target_dict, self.table1)

        # if qApp.cx_src['name'] == 'sqlserver' and target == '系统平台':
        #     self.create_sqlserver2es_task(taskname, source_dict, target_dict, self.table1)

    def create_unify_task(self, taskname, source_dict, target_dict, table1):
        s2e = Sqlserver2Es(source_dict, target_dict)
        # 选择导入资料
        operate_dict = s2e.operate_dict_init(table1)
        if target_dict['target_type'] == 1:
            # 创建导入资料任务
            res = s2e.create_task(taskname, target_dict['target_type'], operate_dict)
            if res['state'] != 0:
                self.info_box = InfoBox('任务创建失败: {0}'.format(res['cxajaxerrmsg']))
                self.info_box.show()
                return
            else:
                self.info_box = InfoBox('任务创建成功')
                self.info_box.show()
        # 选择导入实体
        if target_dict['target_type'] == 2:
            # 实体
            if not operate_dict['operate_list']:
                return
            # 创建导入实体任务
            res = s2e.create_task(taskname, target_dict['target_type'], operate_dict)
            if res['state'] != 0:
                self.info_box = InfoBox('任务创建失败: {0}'.format(res['cxajaxerrmsg']))
                self.info_box.show()
                return
            else:
                self.info_box = InfoBox('任务创建成功')
                self.info_box.show()
        # 导入附件
        if target_dict['target_type'] == 3:
            # 判断关联字段是否选中，至少选择一个 -----------start---------------------
            checked_flag = False
            for i in range(self.table1.rowCount()):
                # q = QComboBox()
                # q.currentIndex()
                if self.table1.cellWidget(i, 5).currentIndex() != 0:
                    checked_flag = True
                    break
            if not checked_flag:
                self.qxzglzd_box = InfoBox("请选择附件与资料的关联字段")
                self.qxzglzd_box.show()
                return
            # 判断关联字段是否选中，至少选择一个 -----------end---------------------

            # 获取关联字段 -----------------start-----------------------
            related_field_dict = {}
            for i in range(self.table1.rowCount()):
                if self.table1.cellWidget(i, 5).currentIndex() != 0:
                    related_name = self.table1.item(i, 0).text()  # 关联名
                    related_field = self.table1.cellWidget(i, 5).currentText().split('[')[1][:-1]  # 关联内容
                    related_field_dict[related_name] = related_field
            # 获取关联字段 -----------------end-----------------------

            # 创建导入资料任务
            res = s2e.create_task(taskname, target_dict['target_type'], operate_dict, related_field_dict)
            if res['state'] != 0:
                self.info_box = InfoBox('任务创建失败: {0}'.format(res['cxajaxerrmsg']))
                self.info_box.show()
                return
            else:
                self.info_box = InfoBox('任务创建成功')
                self.info_box.show()

    def change_target_field_list(self):
        '''
        target字段改变监听事件,做一些特殊优化处理
        :param cur_txt:
        :return:
        '''
        # 当前全部sqlserver字段
        all_target_list = qApp.cx_tgt['target_name_list']
        # 已选中的sqlserver字段
        self.checked_target_list = []
        # 未选中的sqlserver字段
        self.not_checked_target_list = []

        # 遍历所有已选中的combox,选中文本加入已选中队列
        for i in range(self.table1.rowCount()):
            comb_name = self.table1.cellWidget(i, 1).currentText()
            if comb_name == '不导入':
                continue
            self.checked_target_list.append(comb_name)
        # 用全部sqlserver字段 减去 已选中的sqlserver字段,得到 所有未选中的sqlserver字段
        for item in all_target_list:
            if item in self.checked_target_list:
                continue
            self.not_checked_target_list.append(item)

        # 循环所有sqlserver选择框
        for i in range(self.table1.rowCount()):
            # 打断信号传递，防止无限递归
            self.table1.cellWidget(i, 1).blockSignals(True)
            # 将所有选框置为可用
            self.table1.cellWidget(i, 1).setEnabled(True)
            # 获取当前选框的文本
            comb_name = self.table1.cellWidget(i, 1).currentText()

            # 如果当前文本是 '不导入' 或者 '使用数据源字段名' ，说明当前并未选择某个值
            # 清空选择框队列，将 未选择的值 重新载入队列即可
            if comb_name == '不导入' or comb_name == '使用数据源字段名':
                self.table1.cellWidget(i, 1).clear()
                self.table1.cellWidget(i, 1).addItem('不导入')
                self.table1.cellWidget(i, 1).addItem('使用数据源字段名')
                self.table1.cellWidget(i, 1).addItems(self.not_checked_target_list)
                self.table1.cellWidget(i, 1).setCurrentText(comb_name)
            # 如果当前文本不是 '不导入',说明当前选择了某个值
            # 清空选择框队列，将 未选择的值 和 当前选框的值 重新载入队列，并将选择值置为当前选框文本
            else:
                self.table1.cellWidget(i, 1).clear()
                self.table1.cellWidget(i, 1).addItem('不导入')
                self.table1.cellWidget(i, 1).addItem('使用数据源字段名')
                # self.table1.cellWidget(i, 1).addItem('关联其他表')
                self.table1.cellWidget(i, 1).addItem(comb_name)
                self.table1.cellWidget(i, 1).addItems(self.not_checked_target_list)
                self.table1.cellWidget(i, 1).setCurrentText(comb_name)

            # if comb_name != '不导入':
            #     self.table1.cellWidget(i, 1).clear()
            #     self.table1.cellWidget(i, 1).addItem('不导入')
            #     # self.table1.cellWidget(i, 1).addItem('关联其他表')
            #     self.table1.cellWidget(i, 1).addItem(comb_name)
            #     self.table1.cellWidget(i, 1).addItems(self.not_checked_target_list)
            #     self.table1.cellWidget(i, 1).setCurrentText(comb_name)
            # # 如果当前文本是 '不导入'，说明当前并未选择某个值
            # # 清空选择框队列，将 未选择的值 重新载入队列即可
            # else:
            #     self.table1.cellWidget(i, 1).clear()
            #     self.table1.cellWidget(i, 1).addItem('不导入')
            #     self.table1.cellWidget(i, 1).addItems(self.not_checked_target_list)
            #     self.table1.cellWidget(i, 1).setCurrentText(comb_name)

            # 恢复被打断的信号
            self.table1.cellWidget(i, 1).blockSignals(False)

        # print('all_target_list: {0}'.format(all_target_list))
        # print('checked_target_list: {0}'.format(checked_target_list))
        # print('not_checked_target_list: {0}'.format(not_checked_target_list))

            # 如果tartget为'不导入', 那么置灰查重选项
            if self.table1.cellWidget(i, 4):
                if comb_name == '不导入' or comb_name == '使用数据源字段名':
                    self.table1.cellWidget(i, 3).setEnabled(False)
                else:
                    self.table1.cellWidget(i, 3).setEnabled(True)

        # 跳过附件实体
        if qApp.cx_tgt['target_type'] == 3:
            return
        # 如果tartget中包含'不可重复'，那么删除查重选项中的'追加'
        for i in range(self.table1.rowCount()):
            # 获取当前选框的文本
            comb_name = self.table1.cellWidget(i, 1).currentText()
            if '不导入' in comb_name or '使用数据源字段名' in comb_name:
                continue
            print(comb_name)
            comb_code = comb_name.split('[')[1][:-1]
            # print('comb_code: {0}'.format(comb_code))
            for item in qApp.cx_tgt['target_field_list']:
                # print(item)
                # print(comb_code, item['code'], item['mustflag'])
                item_code = str(item['code']) if 'code' in item else str(item['name'])
                if comb_code == item_code and item['repeatable'] == '0':
                    item_index1 = self.table1.cellWidget(i, 4).findText('追加')
                    # print(item_index1)
                    # print(1/0)
                    self.table1.cellWidget(i, 4).removeItem(item_index1)
                    # print(self.table1.cellWidget(i, 4))
                    break
                    # item_index2 = self.table1.cellWidget(i, 3).findText('不查重')
                    # self.table1.cellWidget(i, 3).removeItem(item_index2)
                else:
                    item_index1 = self.table1.cellWidget(i, 4).findText('追加')
                    if item_index1 == -1:
                        self.table1.cellWidget(i, 4).addItem('追加')
                    # item_index2 = self.table1.cellWidget(i, 3).findText('不查重')
                    # if item_index2 == -1:
                    #     self.table1.cellWidget(i, 3).addItem('不查重')

    def change_relate_box_list(self):
        '''
        切换资料关联字段选框时的操作
        :return:
        '''
        ret_checked_list = []
        # 清除选框中已选的字段
        for i in range(self.table1.rowCount()):
            cur_checked = self.table1.cellWidget(i, 5).currentText()
            if not cur_checked in ret_checked_list and cur_checked != '无':
                ret_checked_list.append(cur_checked)

        for i in range(self.table1.rowCount()):
            if self.table1.cellWidget(i, 5).currentText() != '无':
                continue
            # 打断信号传递，防止无限递归
            self.table1.cellWidget(i, 5).blockSignals(True)
            self.table1.cellWidget(i, 5).clear()
            self.table1.cellWidget(i, 5).addItems(qApp.cx_tgt['relate_data_list'])
            for checked in ret_checked_list:
                item_index1 = self.table1.cellWidget(i, 5).findText(checked)
                self.table1.cellWidget(i, 5).removeItem(item_index1)
            # 恢复被打断的信号
            self.table1.cellWidget(i, 5).blockSignals(False)

    def chenge_repaet_check_box_list(self):
        '''
        重复处理按钮是否可操作处理
        :return:
        '''
        if qApp.cx_tgt['target_type'] == 3:
            return
        elif qApp.cx_tgt['target_type'] == 1 or qApp.cx_tgt['target_type'] == 2:
            chachong_flag = False
            for i in range(self.table1.rowCount()):
                if self.table1.cellWidget(i, 3).isChecked():
                    chachong_flag = True
                if chachong_flag:
                    for i in range(self.table1.rowCount()):
                        self.table1.cellWidget(i, 4).setEnabled(True)
                else:
                    for i in range(self.table1.rowCount()):
                        self.table1.cellWidget(i, 4).setEnabled(False)

    def init_bottom_btns_func(self):
        '''
        绑定底部按钮的事件
        :return:
        '''
        # 上一条按钮
        self.table1.parent().before_btn.disconnect()
        self.table1.parent().before_btn.clicked.connect(self.back_one)

        # 下一条按钮
        self.table1.parent().next_btn.disconnect()
        self.table1.parent().next_btn.clicked.connect(self.next_one)

        # 转跳按钮
        self.table1.parent().jump_btn.disconnect()
        self.table1.parent().jump_btn.clicked.connect(lambda: self.fix_page(self.table1.parent().jump_input))

        # 创建任务
        self.table1.parent().create_task_btn.disconnect()
        self.table1.parent().create_task_btn.clicked.connect(self.add_task_name_box)

        # # 开始导入按钮
        # self.table1.parent().start_import_btn.disconnect()
        # self.table1.parent().start_import_btn.clicked.connect(self.start_import)

    def back_one(self):
        '''
        刷新上一条数据
        :return:
        '''
        # 前一条数据小于1的话直接返回
        if self.table1.parent().current_one - 1 < 1:
            return
        # 当前页数减一
        self.table1.parent().current_one -= 1
        print('current_one: {0}'.format(self.table1.parent().current_one))
        # col_slice = sheet1_object.col_values(colx=0)
        # 设置行数、列数
        for i in range(self.table1.rowCount()):
            cur_field = self.table1.item(i, 0).text()
            self.table1.item(i, 2).setText(str(
                qApp.cx_src['com']['field_content_list'][self.table1.parent().current_one-1][
                    qApp.cx_src['com']['field_name_list'].index(cur_field)]))
        # 更新页码
        self.table1.parent().num_show_label.setText(
            "第{0}条 / 共可预览{1}条".format(self.table1.parent().current_one, self.table1.parent().sum_one))

    def next_one(self):
        '''
        刷新下一条数据
        :return:
        '''
        # 如果下一条大于总条数的话，直接返回
        print(self.table1.parent().sum_one)
        if self.table1.parent().current_one + 1 > self.table1.parent().sum_one:
            return
        # 当前页数加一
        self.table1.parent().current_one += 1
        print('current_one: {0}'.format(self.table1.parent().current_one))
        # 设置行数、列数
        for i in range(self.table1.rowCount()):
            cur_field = self.table1.item(i, 0).text()
            print(qApp.cx_src['com']['field_name_list'])
            self.table1.item(i, 2).setText(str(
                qApp.cx_src['com']['field_content_list'][self.table1.parent().current_one-1][
                    qApp.cx_src['com']['field_name_list'].index(cur_field)]))
        # 更新页码
        self.table1.parent().num_show_label.setText(
            "第{0}条 / 共可预览{1}条".format(self.table1.parent().current_one, self.table1.parent().sum_one))

    def jump_want_page(self, want_one):
        '''
        转跳到对应数据
        :return:
        '''
        if not want_one:
            return
        # 更新当前条数
        self.table1.parent().current_one = int(want_one)
        # 设置行数、列数
        for i in range(self.table1.rowCount()):
            cur_field = self.table1.item(i, 0).text()
            self.table1.item(i, 2).setText(str(
                qApp.cx_src['com']['field_content_list'][self.table1.parent().current_one - 1][
                    qApp.cx_src['com']['field_name_list'].index(cur_field)]))
        # 更新页码
        self.table1.parent().num_show_label.setText(
            "第{0}条 / 共可预览{1}条".format(self.table1.parent().current_one, self.table1.parent().sum_one))

    def fix_page(self, jump_input):
        '''
        修正页数
        :return:
        '''
        try:
            if int(jump_input.text()) < 1:
                jump_input.setText('1')
            elif int(jump_input.text()) > self.sum_num:
                jump_input.setText('10')
            self.jump_want_page(int(jump_input.text()))
        except ValueError:
            jump_input.setText('')
